package demo10;

/**
 * @author: WangPeng
 * @createTime: 2022/11/02 20:02
 * @description:
 * @version: v1.0
 */

import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * Executor  线程池的顶级接口: 在该接口只有一个抽象方法void execute(Runnable command); 该方法用来执行Runnable类型的任务。
 *  *   ExecutorService: 它是Executor的子接口，它里面包含的方法:
 *  *       void shutdown(); 关闭线程池，把线程池中提交的任务执行完后再关闭
 *  *       List<Runnable> shutdownNow(); 立即关闭，把一些等待的任务关闭。
 *  *       boolean isShutdown(); 判断线程池是否关闭。
 *  *       boolean isTerminated();判断线程池是否终止。---表示任务是否执行完。
 *  *       <T> Future<T> submit(Callable<T> task); 提交Callable类型的任务给线程池。
 *  *       Future<?> submit(Runnable task); 提交Runnable类型的任务给线程池
 */
public class Test01 {
    public static void main(String[] args) {
        ExecutorService executorService = Executors.newFixedThreadPool(5);
        for (int i = 0; i < 10; i++) {
            final int a = i;
            executorService.submit(new Runnable() {
                @Override
                public void run() {
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println(Thread.currentThread().getName()+"正在执行==="+a);
                }
            });
        }
        //关闭线程池
        executorService.shutdown();
        //立即关闭，把一些等待的任务关闭
        List<Runnable> runnables = executorService.shutdownNow();
        //判断线程池是否关闭
        boolean shutdown = executorService.isShutdown();
        System.out.println(shutdown);
        //判断线程池是否终止
        boolean terminated = executorService.isTerminated();
        System.out.println(terminated);
    }
}
